<?php

namespace Modules\Goods\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
use Modules\Goods\Entities\Attr;
use Modules\Goods\Entities\Fenlei;
use Modules\Goods\Entities\FenleiAttr;
use Modules\Goods\Http\Requests\FenleiRequest;

class FenleiController extends Controller
{
    /**
     * Display a listing of the resource.
     * @return Response
     */
    public function index()
    {
//        dd(\HDModule::getMenuByModule());
//        dd(\HDModule::getModulesLists(['Goods']));
        //获取所有的分类数据
        $allfenlei = Fenlei::getTreefenlei();
        //获取分类表中的前2级分类
        $twofenlei = Fenlei::getTwofenlei();
//        dd($twofenlei);
        //获取当前属性表中的所有顶级属性
        $attr = Attr::where('pid',0)->get();

        return view('goods::fenlei.index',compact('allfenlei','twofenlei','attr'));
    }

    /**
     * Show the form for creating a new resource.
     * @return Response
     */
    public function create()
    {
        return view('goods::create');
    }

    /**
     * Store a newly created resource in storage.
     * @param  Request $request
     * @return Response
     */
    public function store(Request $request,FenleiRequest $fenleiRequest)
    {

        //获取通过post提交的所有数据
        $post = $request->all();
//        dd($post);
        //把提交的数据存入fenlei表中
        $fenlei = Fenlei::create($post);
//        dd($fenlei);
        //获取所有的属性，判断需不需要存入分类属性中间表，为真就是有属性，那么就存，没有的话就不存
        $attr = $request->input('attr');
//        dd($attr);
        if($attr){
            //将选择的属性存入中间表中
            foreach ($attr as $v){
                $fenlei->fenleiAttr()->create([
                   'attr_id' => $v
                ]);
            }
        }
        //设置闪存并返回
        session()->flash('success','分类添加成功');
        return redirect()->back();
    }

    /**
     * Show the specified resource.
     * @return Response
     */
    public function show()
    {
        return view('goods::show');
    }

    /**
     * Show the form for editing the specified resource.
     * @return Response
     */
    public function edit()
    {
        return view('goods::edit');
    }

    /**
     * Update the specified resource in storage.
     * @param  Request $request
     * @return Response
     */
    public function update(Request $request,FenleiRequest $fenleiRequest,$id)
    {

        //获取对应id的数据
        $fenlei = Fenlei::find($id);
        //把对应id的数据用新的数据替换
//        dd($fenlei);
        $fenlei->miaoshu = $request->input('miaoshu');
        $fenlei->fname = $request->input('fname');
        $fenlei->pid = $request->input('pid');
        //保存一下
        $fenlei->save();

        //修改完分类数据之后，还要判断一下是否有选择所属的父级属性，如果选择了，那么就应该把修改前数据所属的父级属性进行相应的变更
        //要记得先把修改前数据所属的父级属性数据删除掉
        FenleiAttr::where('fenlei_id',$id)->delete();
//        FenleiAttr::where('fenlei_id',$id)->delete();
        //然后判断是否有所属的父级属性，有的话就添加到中间表
        //获取所有的属性，判断需不需要存入分类属性中间表，为真就是有属性，那么就存，没有的话就不存
        $attr = $request->input('attr');
//        dd($attr);
        if($attr){
            //将选择的属性存入中间表中
            foreach ($attr as $v){
                $fenlei->fenleiAttr()->create([
                    'attr_id' => $v
                ]);
            }
        }
        //设置闪存
        session()->flash('success','编辑分类成功');
        return redirect()->back();

    }

    /**
     * Remove the specified resource from storage.
     * @return Response
     */
    public function destroy($id)
    {
        //删除有子级的某条数据的方法
        //要想删除某一条数据，首先对要删除的该条数据进行判断，如果有子级分类，就不允许删除，没有子级分类，才可以进行删除。在该条数据对应的表中寻找是否有该条数据id对用的某条字段，注意，对应的该字段最好为想要删除的该条数据的父级id字段，这样通过
        //  1. 模型名称::get()->pluck('该字段名称')  的方法取出该条字段的所有值，得到的会是一个集合对象，加上toArray()就会得到一个数组。最终用一个变量接收这个数组。
        //  2. 然后判断该数据的id是否存在于该数组中，用in_array(该数据的id，上面得到的变量)方法判断，存在的话，就说明该条数据存在子级分类，那么就不允许删除，否则，就说明该条数据没有子级，那么就可以进行删除了。

        //获取分类表中pid这一字段中的所有值，获得的是一个数组
        $pid = Fenlei::pluck('pid')->toArray();
//        dd($pid);
        //然后判断想要删除的分类的id是否存在于分类表中的$pid这个数组中，如果存在，就说明当前分类有子级分类，就不允许删除，否在，就不存在，就说明当前分类没有子级存在，那么就可以删除
        if (in_array($id,$pid)){
            session()->flash('danger','该分类有子级分类，不允许删除');
            return redirect()->route('fenlei.index');
        }else{
            Fenlei::destroy($id);
            FenleiAttr::where('fenlei_id',$id)->delete();
            session()->flash('success','分类删除成功');
            return back();
        }

    }




}
